/**
 * 
 */
package com.gragra.sampling;

import com.gragra.benchmark.CountingAssigner;

/**
 * implements some basic probability processing for population based sampling
 * @author Christoph Teichmann
 * created Feb 2, 2013 5:48:44 PM
 * @version 0.1
 */
public interface PopulationProbabilityAssigner extends CountingAssigner
{
	/**
	 * 
	 * @param pss
	 * @param thread
	 * @return
	 */
	double makeLogProb(PopulationSamplingStructure pss,int thread);
	/**
	 * returns the size of the population that will be used
	 * @return
	 */
	int getPopulationSize();
	/**
	 * adds an initial assignment of the hidden structure in pss
	 * @param pss
	 */
	void add(PopulationSamplingStructure pss,int thread);
	/**
	 * adds an initial assignment of the hidden structure in pss
	 * @param pss
	 */
	void remove(PopulationSamplingStructure pss, int thread);
	/**
	 * 
	 * @param thread
	 * @return
	 */
	double getNonLocalLogLike(int thread);
	/**
	 * 
	 * @param num 
	 * @return
	 */
	double getLocalLogLike(PopulationSamplingStructure pss, int thread);
	/**
	 * 
	 * @param p
	 */
	void reduceStructuralAnnealing(int p);
}